package com.wangzh.concurrent.lock.unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;

public class ListTest {
    public static void main(String[] args) throws InterruptedException {

        /**
         * List<String> list = new ArrayList<>();
         *出现 ConcurrentModificationException 异常，是因为一个线程在遍历集合时，
         * 另外一个线程修改了集合的结构。
         * 如果不遍历list则不会报错，但是list的可能会有null值
         *
         *
         * 解决办法：
         * 1.List<String> list = new Vector<>();
         *
         * 2.List<String> list = Collections.synchronizedList(new ArrayList<>());
         *
         * 3.List<String> list = new CopyOnWriteArrayList<>();
         * 写入是复制。查看add方法
         */
        List<String> list = new CopyOnWriteArrayList<>();

        for (int i = 0; i < 10; i++) {
            int finalI = i;
            new Thread(() ->{
                list.add("i="+ finalI+";" +UUID.randomUUID().toString().substring(0,5));
//                System.out.println(finalI);
                System.out.println(list);
            },String.valueOf(i)).start();
        }

//        TimeUnit.SECONDS.sleep(1);
//        System.out.println(list.size());
//        System.out.println(list);
    }
}
